package com.gaojinqi.base.common.model;

import lombok.Data;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;


/**
 * 基础实体类
 *
 * @author gaojinqi
 * @version 1.0
 * @since 2020年04月14日
 */
@Data
/*
    @MappedSuperclass
    可选，将超类的JPA注解传递给子类,使子类能够继承超类的JPA注解。<BR/>
    标注为@MappedSuperclass的类将不是一个完整的实体类，他将不会映射到数据库表，但是他的属性都将映射到其子类的数据库字段中。<BR/>
    标注为@MappedSuperclass的类不能再标注@Entity或@Table注解，也无需实现序列化接口。<BR/>
*/
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class BaseEntity implements Serializable {

    /**
     * BaseEntity默认排序字段
     */
    public static final String DEFAULT_SORT_BY = "createdOn";

    /**
     * 创建人
     */
    @CreatedBy
    @Column(columnDefinition = "varchar(32) comment '创建人'")
    protected String createdBy;

    /**
     * 修改人
     */
    @LastModifiedBy
    @Column(columnDefinition = "varchar(32) comment '修改人'")
    protected String lastUpdateBy;

    /**
     * 创建时间
     */
    @CreatedDate
    @Column(columnDefinition = "datetime comment '创建时间'")
    protected Date createdOn;

    /**
     * 最后修改时间
     */
    @LastModifiedDate
    @Column(columnDefinition = "datetime comment '最后修改时间'")
    protected Date lastUpdateOn;


}
